/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */

package br.siagefi.mb;


import br.siagefi.model.ContaBancaria;
import br.siagefi.model.Documento;
import br.siagefi.model.Lancamento;
import br.siagefi.service.ContaBancariaService;
import br.siagefi.service.LancamentoService;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import javax.faces.context.FacesContext;

/**
 *
 * @author NOTE
 */

@ManagedBean
@SessionScoped
public class FluxoCaixaBean implements Serializable{
    
    
   private ContaBancaria conta;
   private final ContaBancariaService service;
   private List<ContaBancaria> contas;
   private List<Lancamento> lancamentos;
   private Documento documento;
   private final LancamentoService lctoService;
   private Date dataInicio;
   private Date dataFim;


    public FluxoCaixaBean() {
        this.service = new ContaBancariaService();
        this.listarContas();
        this.lancamentos = new ArrayList<>();
        this.lctoService = new LancamentoService();
        this.documento = new Documento();
    }
    
    // regras de negócio
    
    public final void listarContas(){
        this.setContas(service.listar());
    }
    
    public void listarLancamentos(){
        this.setLancamentos(lctoService.listar(this.getConta(),this.getDataInicio(), this.getDataFim()));
    }
     
    public String consultarDocumento(Documento documento){
        this.setDocumento(documento);
        return "consultarDocumento";
    }
    
    // navegação
    
    //template
    public String gerenciarFluxoCaixa(){
        FacesContext.getCurrentInstance().getExternalContext().getSessionMap().remove("fluxoCaixaBean");
        return"/pages/users/gerente/fluxoCaixa";
    }
    
    public String limpar(){
        this.setConta(new ContaBancaria());
        this.setDataInicio(new Date());
        this.setDataFim(new Date());
        this.setLancamentos(new ArrayList<Lancamento>());
        this.setDocumento(new Documento());
        this.listarContas();
        return "fluxoCaixa";
    }
    
    public String voltar(){
        this.limpar();
        return "fluxoCaixa";
    }
     
    // listas e enuns
    
    
    // getters e setters
    
    public ContaBancaria getConta() {
        return conta;
    }

    public void setConta(ContaBancaria conta) {
        this.conta = conta;
    }

    public List<ContaBancaria> getContas() {
        return contas;
    }

    public void setContas(List<ContaBancaria> contas) {
        this.contas = contas;
    }

    public List<Lancamento> getLancamentos() {
        return lancamentos;
    }

    public void setLancamentos(List<Lancamento> lancamentos) {
        this.lancamentos = lancamentos;
    }

    public Date getDataInicio() {
        return dataInicio;
    }

    public void setDataInicio(Date dataInicio) {
        this.dataInicio = dataInicio;
    }

    public Date getDataFim() {
        return dataFim;
    }

    public void setDataFim(Date dataFim) {
        this.dataFim = dataFim;
    }

    public Documento getDocumento() {
        return documento;
    }

    public void setDocumento(Documento documento) {
        this.documento = documento;
    }

    
}
